home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
cpp_libs
/
answrbok
/
6_10.lha
/
6_10
/
6_10neg.c
< prev
next >
Wrap
Text File
|
1993-08-08
|
1KB
|
63 lines
* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
* The C++ Answer Book */
* Tony Hansen */
* All rights reserved. */
*
Negate u[1..n] to form w[0..n]
Uses a variation on:
The Art of Computer Programming, volume 2
D. Knuth, Section 4.3.1, Algorithm A
/
include <lint.h>
INT operator-(LINT u)
LINT w;
/*
A1 [Initialize]
set j <- n
k <- 0
becomes
k <- 1
*/
LINT_Ltype k = 1;
for (int j = 3; ; )
{
/*
A2(a) [Add digits]
set w[j] <- (u[j] + v[j] + k) mod b
becomes
set w[j] <- (~u[j] + k) mod b
*/
// cerr << "u=" << form("%4.4x", u.s[j]) << "\n"; /* DELETE */
LINT_type l1 = ~u.s[j];
LINT_Ltype l = l1 + k;
// cerr << "l=" << form("%4.4x", l) << "\n"; /* DELETE */
w.s[j] = l; // % LINT_base
// cerr << "w=" << form("%4.4x", w.s[j]) << "\n"; /* DELETE */
/*
A3 [Loop on j]
decrease j by one
*/
if (--j < 0)
break;
/*
A2(b)
k <- (u[j] + v[j] + k) / b
*/
k = (l / LINT_base) ? 1 : 0;
// cerr << "k=" << form("%4.4x", k) << "\n"; /* DELETE */
}
/*
A3(b)
Set w[0] <- k
{ modification: ignore overflow into w[0] }
*/
return w;